In a network environment it is often advantageous for a user of a computing device to execute applications on a remote server rather than on the local device. Multiple client devices (clients) can have access to the remote server and applications installed on that server. This eliminates the need to install and upkeep separate applications on client devices, decreases administration demands and costs, and promotes uniformity of user experiences and interchangeability of client devices. Such server-based computing allows utilizing remote server's computing power and memory capabilities, which often significantly exceed resources available on client terminal devices. Often, a client device is a “lean” (or “thin”) machine which itself performs little computing, or storage of data, with only keyboard, mouse, and graphical interface data exchanges between the lean client and the remote server device with the bulk of computing, data processing, and data storage taking place on the remote server. The applications executed on the remote server are being controlled by the client device via, for example, a remote desktop virtualization session.
In a typical virtualization session, after the client device gains access to the host server, a guest operating system is launched on the host server. Separate guest operating systems are provided for separate client devices. Guest operating systems are managed by a virtual machine monitor, also referred to as a hypervisor. The hypervisor is installed on a host operating system of the remote server. Each user can access applications that are authorized (published) for that particular user by the host server. The applications and the data generated by the applications generally remain on the remote host server. The local client device communicates with the remote sever using a remote display protocol. In other implementations of a remote client-server access, it could be more efficient (e.g., from a software licensing standpoint) to make multiple client devices share the same guest operating system on the host server but execute applications within separate non-overlapping “containers” assigned to various clients. Such containerization approach allows different client devices share operating system's relevant binaries, libraries, and drivers, and only assign to each container binaries and libraries relevant for a particular application. Compared with the need to initialize and maintain separate guest operating systems, a containerization engine installed atop the host operating system requires less memory and represents a smaller and faster way to run applications remotely. Accordingly, containerization allows the server to potentially host far more application containers than virtual machines.